package com.bilifuture.statemachine.machine;
import com.bilifuture.statemachine.message.Message;
import com.bilifuture.statemachine.message.Response;
import com.bilifuture.statemachine.transition.Transition;
import lombok.Data;

import java.util.HashMap;
import java.util.Map;

/**
 * @author bilifuture
 * @description: 状态机执行上下文 上下文中主要存放一次状态机中状态转换的上下文信息
 * @date 2022-02-23
 */
@Data
public class StateMachineContext {
    
    /**
     * 事件
     */
    private String event;
    
    /**
     * 状态机配置
     */
    private StateMachineConfig stateMachineConfig;
    
    /**
     * 请求数据消息
     */
    private Message message;
    
    /**
     * 响应
     */
    private Response response;
    
    /**
     * 异常数据
     */
    private Map errorData = new HashMap();
    
    /**
     *  是否有异常
     */
    public boolean hasError(){
        if(errorData.size() > 0){
            return true;
        }
        return false;
    }
    
    /**
     * 获取异常数据
     */
    public Map getErrors(){
        return errorData;
    }
    
    /**
     * 获取状态转移
     *
     * @return {@link Transition}
     */
    public Transition getTransition(){
        return stateMachineConfig.getCache().get(this.event);
    }
    
    /**
     * 获取目标状态
     *
     * @return {@link String}
     */
    public String getTarget(){
        return getTransition().getTarget();
    }
    
    
}
